package Logica;
import Persistencia.exceptions.PreexistingEntityException;
import java.util.Set;
import java.util.HashSet;
import java.io.Serializable;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.*;

@Entity
public class Vehiculo implements Serializable {

    @Basic
    private String dominio;
    @Id
    private String nroChasis;
    @Basic
    private String nroMotor;
    @Basic
    private Integer anio;
    @Basic
    private Integer kilometrosRec;
    @Basic
    private String equipamiento;
    @Basic
    @Temporal(javax.persistence.TemporalType.DATE)
    private Calendar fechaCompra;
    @OneToOne
    private Modelo unModelo;
    @OneToOne
    private Garantia unaGarantia;
    @OneToMany
    private List<Repuesto> respuestos;
    @OneToMany
    private List<EstadoVehiculo> estados;
    @OneToMany
    private Set<PedidoRepuesto> pedidos;
    @OneToOne
    private Turno unTurno;
    @ManyToOne
    private Cliente unCliente;
    @OneToMany
    private List<ReparacionEnEjecucion> reparacionesEnEjecucion;
      
    
    public Vehiculo() {
    }

    public Vehiculo(String dominio, String nroChasis, String nroMotor, Integer anio, Integer kilometrosRec, String equipamiento,
            Calendar fechaCompra, Modelo unModelo, Garantia unaGarantia, Turno unTurno, Cliente unCliente) {
        this.dominio = dominio;
        this.nroChasis = nroChasis;
        this.nroMotor = nroMotor;
        this.anio = anio;
        this.kilometrosRec = kilometrosRec;
        this.equipamiento = equipamiento;
        this.fechaCompra = fechaCompra;
        this.unModelo = unModelo;
        this.unaGarantia = unaGarantia;
        this.respuestos = new LinkedList();
        this.estados = new LinkedList();
        this.pedidos = new HashSet();
        this.unTurno = unTurno;
        this.unCliente = unCliente;
        this.reparacionesEnEjecucion = new LinkedList();
        
    }
   
    
    public Set<PedidoRepuesto> getPedidos() {
        return pedidos;
    }

    public void setPedidos(Set<PedidoRepuesto> pedidos) {
        this.pedidos = pedidos;
    }

    public List<ReparacionEnEjecucion> getReparacionesEnEjecucion() {
        return reparacionesEnEjecucion;
    }

    public void setReparacionesEnEjecucion(List<ReparacionEnEjecucion> reparacionesEnEjecucion) {
        this.reparacionesEnEjecucion = reparacionesEnEjecucion;
    }

    public String getDominio() {
        return dominio;
    }

    public String getNroChasis() {
        return nroChasis;
    }

    public String getNroMotor() {
        return nroMotor;
    }

    public Integer getAnio() {
        return anio;
    }

    public Integer getKilometrosRec() {
        return kilometrosRec;
    }

    public String getEquipamiento() {
        return equipamiento;
    }

    public Calendar getFechaCompra() {
        return fechaCompra;
    }

    public void setDominio(String dominio) {
        this.dominio = dominio;
    }

    public void setNroChasis(String nroChasis) {
        this.nroChasis = nroChasis;
    }

    public void setNroMotor(String nroMotor) {
        this.nroMotor = nroMotor;
    }

    public void setAnio(Integer anio) {
        this.anio = anio;
    }

    public void setKilometrosRec(Integer kilometrosRec) {
        this.kilometrosRec = kilometrosRec;
    }

    public void setEquipamiento(String equipamiento) {
        this.equipamiento = equipamiento;
    }

    public void setFechaCompra(Calendar fechaCompra) {
        this.fechaCompra = fechaCompra;
    }

    public Modelo getUnModelo() {
        return unModelo;
    }

    public void setUnModelo(Modelo unModelo) {
        this.unModelo = unModelo;
    }

    public Garantia getUnaGarantia() {
        return unaGarantia;
    }

    public void setUnaGarantia(Garantia unaGarantia) {
        this.unaGarantia = unaGarantia;
    }

    public Turno getUnTurno() {
        return unTurno;
    }

    public void setUnTurno(Turno unTurno) {
        this.unTurno = unTurno;
    }

    public Cliente getUnCliente() {
        return unCliente;
    }

    public void setUnCliente(Cliente unCliente) {
        this.unCliente = unCliente;
    }

    public List<Repuesto> getRespuestos() {
        return respuestos;
    }

    public void setRespuestos(List<Repuesto> respuestos) {
        this.respuestos = respuestos;
    }

    public List<EstadoVehiculo> getEstados() {
        return estados;
    }

    public void setEstados(List<EstadoVehiculo> estados) {
        this.estados = estados;
    }

    @Override
    public String toString() {
        return this.getUnModelo().getUnaMarca().getNombre() + "\t " + this.getUnModelo().getNombre();
    }

}
